// components/wx-login-popup/index.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    show: {
      type: Boolean,
      value: false
    },
    title: {
      type: String,
      value: '用户登录'
    },
    desc: {
      type: String,
      value: '登录后可享受更多服务'
    }
  },

  /**
   * 组件的初始数据
   */
  data: {
    loading: false
  },

  /**
   * 组件的方法列表
   */
  methods: {
    // 关闭弹窗
    onClose() {
      this.triggerEvent('close')
    },

    // 点击蒙层关闭
    onMaskTap() {
      this.onClose()
    },

    // 微信登录
    async onWxLogin() {
      this.setData({ loading: true })
      
      try {
        // 获取微信授权
        const { userInfo } = await this.getUserProfile()
        
        // 获取登录凭证
        const { code } = await this.getWxCode()
        
        // 调用登录接口
        const loginResult = await this.doLogin(code, userInfo)
        
        // 保存用户信息
        this.saveUserInfo(loginResult)
        
        // 触发登录成功事件
        this.triggerEvent('success', {
          userInfo: loginResult.userInfo,
          token: loginResult.token
        })
        
        // 显示成功提示
        wx.showToast({
          title: '登录成功',
          icon: 'success'
        })
        
        // 关闭弹窗
        this.onClose()
        
      } catch (error) {
        console.error('登录失败：', error)
        wx.showToast({
          title: error.message || '登录失败',
          icon: 'none'
        })
      } finally {
        this.setData({ loading: false })
      }
    },

    // 获取用户信息
    getUserProfile() {
      return new Promise((resolve, reject) => {
        wx.getUserProfile({
          desc: '用于完善用户资料',
          success: (res) => {
            resolve(res)
          },
          fail: (error) => {
            reject(new Error('获取用户信息失败'))
          }
        })
      })
    },

    // 获取微信登录凭证
    getWxCode() {
      return new Promise((resolve, reject) => {
        wx.login({
          success: (res) => {
            if (res.code) {
              resolve({ code: res.code })
            } else {
              reject(new Error('获取登录凭证失败'))
            }
          },
          fail: () => {
            reject(new Error('微信登录失败'))
          }
        })
      })
    },

    // 调用后端登录接口
    async doLogin(code, userInfo) {
      // 这里可以调用统一封装的接口
      // 暂时模拟登录接口返回
      return new Promise((resolve, reject) => {
        // 模拟网络请求延迟
        setTimeout(() => {
          // 模拟登录成功
          const mockResult = {
            userInfo: {
              nickName: userInfo.userInfo.nickName,
              avatarUrl: userInfo.userInfo.avatarUrl,
              gender: userInfo.userInfo.gender,
              city: userInfo.userInfo.city,
              province: userInfo.userInfo.province,
              country: userInfo.userInfo.country
            },
            token: 'mock_token_' + Date.now(),
            userId: 'user_' + Date.now()
          }
          resolve(mockResult)
          
          // 如果要接入真实接口，可以这样调用：
          // const { http } = require('../../utils/request.js')
          // http.post('auth/login', {
          //   code: code,
          //   userInfo: userInfo.userInfo
          // }).then(resolve).catch(reject)
        }, 1000)
      })
    },

    // 保存用户信息
    saveUserInfo(loginResult) {
      try {
        // 保存到本地存储
        wx.setStorageSync('token', loginResult.token)
        wx.setStorageSync('userInfo', loginResult.userInfo)
        wx.setStorageSync('userId', loginResult.userId)
        
        // 保存到全局数据
        const app = getApp()
        if (app.globalData) {
          app.globalData.token = loginResult.token
          app.globalData.userInfo = loginResult.userInfo
          app.globalData.userId = loginResult.userId
          app.globalData.isLogin = true
        }
      } catch (error) {
        console.error('保存用户信息失败：', error)
      }
    }
  }
})